package main

import "fmt"

func f() {
	fmt.Println("a")
	//1.当一个函数 F 调用 panic，F 的执行就会停止，
	//2.F中defer函数调用会被执行然后 F 返回控制到它的调用者
	panic(55)
	fmt.Println("b")
	fmt.Println("f")
}
func main() {
	defer func() { //必须要先声明defer，否则不能捕获到panic异常
		fmt.Println("c")
		//recover只能使用在defer函数中
		//如果当前的 goroutine panicking，recover 调用将会捕获 panic 传递的值并且恢复正常的执行
		if err := recover(); err != nil {
			fmt.Println(err) //这里的err其实就是panic传入的内容，55
		}
		fmt.Println("d")
	}()

	f()
	fmt.Println("Over!")
}
